﻿using System;
using System.Collections.Generic;
using System.Data.Objects.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MMCInfo.Models;
using MMCInfo.ViewModels;

namespace MMCInfo.Controllers
{
    [Authorize(Roles = "ArtsA, ArtsB, VerplegerA, VerplegerB")]
    public class DossierController : Controller
    {
        //
        // GET: /Dossier/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult CreatePatient()
        {
            mmcinfoEntities2 db = new mmcinfoEntities2();

            PatientViewModel model = new PatientViewModel();
            model.Zorgverzekeraars = db.Zorgverzekeraar
                .ToList()
                .Select(x => new SelectListItem
                {
                    Text = x.Naam,
                    Value = x.ZVID.ToString()
                });

            return View(model);
        }

        [HttpPost]
        public ActionResult CreatePatient(PatientViewModel model)
        {
            if (!ModelState.IsValid)
            {
                //Model is niet door validatie gekomen, teruggeven aan client
                return View(model);
            }

            try
            {
                int newPATID;
                using (mmcinfoEntities2 db = new mmcinfoEntities2())
                {
                    Patient patient = new Patient();
                    patient.Initialen = model.Initialen;
                    patient.Achternaam = model.Achternaam;
                    patient.StraatEnNummer = model.StraatEnNummer;
                    patient.Postcode = model.Postcode;
                    patient.Woonplaats = model.Woonplaats;
                    patient.Telefoonnummer = model.Telefoonnummer;
                    patient.Geboortedatum = model.Geboortedatum;
                    patient.Geslacht = model.Geslacht;
                    patient.ZVID = model.ZVID;
                    patient.Polisnummer = model.Polisnummer;

                    db.Patient.Add(patient);
                    db.SaveChanges();

                    newPATID = patient.PATID;
                }
                return RedirectToAction("PatientDetails", new { id = newPATID});
            }
            catch
            {
                return View("Index");
            }
        }

        public ActionResult PatientDetails(int? id)
        {
            if (id == null)
            {
                return View(new PatientViewModel());
            }

            mmcinfoEntities2 db = new mmcinfoEntities2();

            PatientViewModel model = new PatientViewModel();
            Patient patient = db.Patient.Find(id);
            model.Initialen = patient.Initialen;
            model.Achternaam = patient.Achternaam;
            model.Geboortedatum = patient.Geboortedatum;
            model.Geslacht = patient.Geslacht;
            model.Polisnummer = patient.Polisnummer;
            model.Postcode = patient.Postcode;
            model.StraatEnNummer = patient.StraatEnNummer;
            model.Telefoonnummer = patient.Telefoonnummer;
            model.Woonplaats = patient.Woonplaats;
            model.ZVID = patient.ZVID;
            model.Zorgverzekeraar = db.Zorgverzekeraar.Where(x => x.ZVID == patient.ZVID).FirstOrDefault().Naam;

            return View(model);
        }

        public ActionResult SearchPatient(SearchPatientViewModel model)
        {
            if (!ModelState.IsValid)
            {
                //Model is niet door validatie gekomen, teruggeven aan client
                return View(model);
            }

            mmcinfoEntities2 db = new mmcinfoEntities2();

            model.Patienten = db.Patient
                                .Where(p => p.Geboortedatum.StartsWith(
                                    model.Geboortedatum
                                ))
                                .Select(c => new SelectListItem { 
                                    Text = c.Achternaam, 
                                    Value = SqlFunctions.StringConvert((double)c.PATID)
                                });

            return View(model);
        }

        public JsonResult SearchPatientResult(string geboorteDatum)
        {
            mmcinfoEntities2 db = new mmcinfoEntities2();

            IEnumerable<SelectListItem> Patienten = db.Patient
                                .Where(p => p.Geboortedatum.StartsWith(
                                    geboorteDatum
                                ))
                                .Select(c => new SelectListItem
                                {
                                    Text = c.Achternaam,
                                    Value = SqlFunctions.StringConvert((double)c.PATID)
                                });

            return new JsonResult { Data = Patienten, JsonRequestBehavior = JsonRequestBehavior.AllowGet };

        }

        public ActionResult UpdatePatient(int id)
        {
            mmcinfoEntities2 db = new mmcinfoEntities2();

            PatientViewModel model = new PatientViewModel();
            Patient patient = db.Patient.Find(id);

            model.PATID = id;
            model.Initialen = patient.Initialen;
            model.Achternaam = patient.Achternaam;
            model.Geboortedatum = patient.Geboortedatum;
            model.Geslacht = patient.Geslacht;
            model.Polisnummer = patient.Polisnummer;
            model.Postcode = patient.Postcode;
            model.StraatEnNummer = patient.StraatEnNummer;
            model.Telefoonnummer = patient.Telefoonnummer;
            model.Woonplaats = patient.Woonplaats;
            model.ZVID = patient.ZVID;
            model.Zorgverzekeraar = db.Zorgverzekeraar.Where(x => x.ZVID == patient.ZVID).FirstOrDefault().Naam;

            model.Zorgverzekeraars = db.Zorgverzekeraar
                .ToList()
                .Select(x => new SelectListItem
                {
                    Text = x.Naam,
                    Value = x.ZVID.ToString()
                });

            return View(model);
        }

        [HttpPost]
        public ActionResult UpdatePatient(PatientViewModel model)
        {
            if (!ModelState.IsValid)
            {
                //Model is niet door validatie gekomen, teruggeven aan client
                return View(model);
            }

            try
            {
                using (mmcinfoEntities2 db = new mmcinfoEntities2())
                {
                    Patient patient = db.Patient.Find(model.PATID);
                    patient.Initialen = model.Initialen;
                    patient.Achternaam = model.Achternaam;
                    patient.StraatEnNummer = model.StraatEnNummer;
                    patient.Postcode = model.Postcode;
                    patient.Woonplaats = model.Woonplaats;
                    patient.Telefoonnummer = model.Telefoonnummer;
                    patient.Geboortedatum = model.Geboortedatum;
                    patient.Geslacht = model.Geslacht;
                    patient.ZVID = model.ZVID;
                    patient.Polisnummer = model.Polisnummer;

                    db.SaveChanges();
                }
                return RedirectToAction("UpdatePatient", new { id = model.PATID });
            }
            catch
            {
                return View("Index");
            }
        }
    }

}
